上周末参加了中国计算机协会搞的CSP认证，有点不太理想，特地新开一个帖子记录考试
的心情和题目的详细解答，有想法的小伙伴欢迎来一起交流。
原贴地址：[第22场CCF 
CSP认证题解](http://blog.leanote.com/post/dawnmagnet/CCF)
想在线模拟做题的小伙伴可以去这个网址:[CCF-CSP历届真题](http://118.190.20.162/
home.page)
我在题解中全部使用符合GNU C++11标准的代码,提交时应当选择"3. Dev-CPP 
(C++语言C++11标准)"或者"4. Dev-CPP (C++语言C++14标准)"
## 第一题
![title](https://leanote.com/api/file/getImage?fileId=607f93b4ab64414e8200033
1)
### 思路分析
这就是一个非常基础的送分题，直接新建一个长度为L的数组进行统计即可
100% C++代码(93ms 3.015MB)
```
#include <bits/stdc++.h>
using namespace std;
int main() {
    int n, m, L;
    cin >> n >> m >> L;
    vector<int> h(L, 0);
    for (int i = 0; i < n * m; ++i) {
        int tmp;
        cin >> tmp;
        h[tmp]++;
    }
    for (int i = 0; i < L; ++i) {
        cout << h[i] << ' ';
    }
}
```
## 第二题
![title](https://leanote.com/api/file/getImage?fileId=607f9377ab64414c890003d
3)
### 思路分析
我们首先观察一下该题，意思就是说计算一个点周围几个点的平均值，如果我们对每个
点进行分别计算，复杂度就会达到O(n^2*r^2)，非常复杂，那么有没有什么简便的计算
方法呢？
大家会发现，很多地方我们都会重复计算，比如样例输入1中:
 - 0周围r区域内的和是0+1+4+5
 - 1周围r区域内的和是0+1+4+5+2+6
鉴于此，我们只需要把0周围的加上2+6即可得到1周围的，但是要是按照每个点分别计算
，我们就会重复计算0+1+4+5很多遍，那么如何减少重复计算呢？我想出来了一个办法。
 
这个题目的主要意思就是让我们求一个区域范围内的和，而且要快，那么我们可以先求
出来**每个点与左上角围城矩形内所有元素的和**。下面给大家画个图说明一下为什么
这样能够便捷计算。